uint32_t read_from_log(lhdfs_ctrl *ctrl, char *datablock,int32_t db_start,
int32_t db_end){
	uint32_t db_offset = 0;
	uint32_t idx_in_ib = 0;
	struct lhdfs_data_block cur_block;
	struct lhdfs_indirect_block _ib;
	struct lhdfs_indirect_block _ib2;
	for(int32_t db_cur = db_start; db_cur > db_end;db_cur++){
		if(is_db_inlevel1_index_rang(db_cur)){
		 //load data from the first level
			cur_block = load_block(fd,inode.lfs_block[db_cur]);
			memcpy(datablock + db_offset,cur_block.data,8196);
			db_offset += 8196;
		}
		else if(is_db_inlevel2_index_rang(db_cur)){
				//load the second inode
				_ib=load_block(fd,inode.lfs_ib);
			idx_in_ib = db_cur - 12;
			cur_block = 
			load_block(fd,_ib.db_address[idx_in_ib]);
			memcpy(datablock + db_offset,&cur_block,8196);
			db_offset += 8196;
		}
		else if(is_db_inlevel3_index_rang(db_cur)){
			//load the third inode block to memory
			_ib =
			load_block(fd,inode.lfs_doubly_ib);
			idx_in_ib = (db_cur - 1035)/1024;
			//bug
			_ib2 = 
			load_block(fd,_ib[idx_in_ib]);
			idx_in_ib = (db_cur - 1035)%1024;
			cur_block =
			load_block(_ib2.data_address[idx_in_ib]);
			memcpy(datablock + db_offset, &cur_block,8196);
			db_offset += 8196;
		}
		else if(is_db_inlevel4_index_rang(db_cur)){
			//load forth inode into memory
			_ib =
			load_block(fd,inode.lfs_triply_ib);
			db_cur = db_cur - 1035 -1024*1024;
			idx_in_ib = db_cur/1024;
			if(_ib2 != NULL && db_cur%(1024*1024) == 0){
				_ib2 =
				load_block(fd,_ib.data_address[idx_in_ib]);
			}
			idx_in_ib = db_cur
		}
	}//for
}
